package com.ruoyi.syrw.aspectj;


import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.ObjUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.ruoyi.common.utils.BigDecimalUtil;
import com.ruoyi.syrw.annotation.CoverRefCZB;
import com.ruoyi.report_tg.domain.vo.TdczbjlbeBsInfoVo;
import com.ruoyi.report_tg.domain.vo.TdczbjlbsBsInfoVo;
import com.ruoyi.report_tg.domain.vo.TdczbjlbyBsInfoVo;
import com.ruoyi.report_tg.service.ITdczbjlbeBsInfoService;
import com.ruoyi.report_tg.service.ITdczbjlbyBsInfoService;
import com.ruoyi.syrw.domain.RefReportExcel;
import com.ruoyi.syrw.domain.vo.RefReportExcelVo;
import com.ruoyi.syrw.mapper.RefReportExcelMapper;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;

import java.util.List;
import java.util.stream.Collectors;


/**
 * 从承载比一二处 引用内容 覆盖 承载三的内容
 *
 * @author zyb
 */
@Slf4j
@Aspect
@Component
@RequiredArgsConstructor
@Order(90)
public class CoverRefCZBAspect {

//    private final RefReportExcelMapper refReportExcelMapper;
//    private final ITdczbjlbeBsInfoService czb2Service;
//    private final ITdczbjlbyBsInfoService czb1Service;
//
//    /**
//     * 从承载比一二处 引用内容 覆盖 承载三的内容
//     *
//     * @param joinPoint 切点
//     */
//    @Around(value = "@annotation(coverRefCZB)")
//    public TdczbjlbsBsInfoVo fillResult(ProceedingJoinPoint joinPoint, CoverRefCZB coverRefCZB) throws Throwable {
//        TdczbjlbsBsInfoVo result = (TdczbjlbsBsInfoVo) joinPoint.proceed();
//        // 从承载比一二处 引用内容 覆盖 承载三的内容
//        Assert.notNull(result.getExcelId(), "excelId为空，发现异常");
//        Long reportId = refReportExcelMapper.selectVoOne(new LambdaQueryWrapper<RefReportExcel>()
//            .eq(RefReportExcel::getExcelId, result.getExcelId())).getReportId();
//
//        List<Long> czb3ExcelIds = refReportExcelMapper.selectVoList(new LambdaQueryWrapper<RefReportExcel>()
//            .eq(RefReportExcel::getReportId, reportId)
//            .eq(RefReportExcel::getExcelTypeId, 1788465036200402946L))
//            .stream().map(RefReportExcelVo::getExcelId).collect(Collectors.toList());
//        // 此result 在czb3的序号
//        int index = czb3ExcelIds.indexOf(result.getExcelId());
//        List<Long> czb2ExcelIds = refReportExcelMapper.selectVoList(new LambdaQueryWrapper<RefReportExcel>()
//            .eq(RefReportExcel::getReportId, reportId)
//            .eq(RefReportExcel::getExcelTypeId, 1788464932693368833L))
//            .stream().map(RefReportExcelVo::getExcelId).collect(Collectors.toList());
//        if (CollUtil.isNotEmpty(czb2ExcelIds) && czb2ExcelIds.size() >= index + 1) {
//            // 此处的策略是 1个czb2 == 1个czb3
//            TdczbjlbeBsInfoVo czb2Vo = czb2Service.queryById(czb2ExcelIds.get(index));
//            Assert.notNull(czb2Vo, "发生异常，未找到指定的承载比二记录表");
//            result.setZuidgmd(ObjUtil.isNull(result.getZuidgmd()) ? czb2Vo.getZuidgmd() : null);
//            result.setZuijhsl(ObjUtil.isNull(result.getZuijhsl()) ? czb2Vo.getZuijhsl() : null);
//            result.setJiscs1(ObjUtil.isNull(result.getJiscs1()) ? czb2Vo.getMeicjs1() : null);
//            result.setJiscs2(ObjUtil.isNull(result.getJiscs2()) ? czb2Vo.getMeicjs2() : null);
//            result.setJiscs3(ObjUtil.isNull(result.getJiscs3()) ? czb2Vo.getMeicjs3() : null);
//            result.setCbr1(ObjUtil.isNull(result.getCbr1()) ? czb2Vo.getCbr2p5mm1() : null);
//            result.setCbr2(ObjUtil.isNull(result.getCbr2()) ? czb2Vo.getCbr2p5mm2() : null);
//            result.setCbr3(ObjUtil.isNull(result.getCbr3()) ? czb2Vo.getCbr2p5mm3() : null);
//
//            List<Long> czb1ExcelIds = refReportExcelMapper.selectVoList(new LambdaQueryWrapper<RefReportExcel>()
//                .eq(RefReportExcel::getReportId, reportId)
//                .eq(RefReportExcel::getExcelTypeId, 1788464851118350338L))
//                .stream().map(RefReportExcelVo::getExcelId).collect(Collectors.toList());
//            if (CollUtil.isNotEmpty(czb1ExcelIds) && czb1ExcelIds.size() >= result.getPage()) {
//                // 此处的策略是 1个czb2\czb1  == 1个czb3
//                TdczbjlbyBsInfoVo czb1Vo = czb1Service.queryById(czb1ExcelIds.get(index));
//                Assert.notNull(czb1Vo, "发生异常，未找到指定的承载比一记录表");
//                result.setYasd1(ObjUtil.isNull(result.getYasd1()) ? BigDecimalUtil.divide(czb1Vo.getGanmdpjz30(),
//                    czb2Vo.getZuidgmd()) : null);
//                result.setYasd2(ObjUtil.isNull(result.getYasd2()) ? BigDecimalUtil.divide(czb1Vo.getGanmdpjz50(),
//                    czb2Vo.getZuidgmd()) : null);
//                result.setYasd3(ObjUtil.isNull(result.getYasd3()) ? BigDecimalUtil.divide(czb1Vo.getGanmdpjz98(),
//                    czb2Vo.getZuidgmd()) : null);
//            }
//        }
//        return result;
//    }


}
